package cn.kinoko.service.cnTeam;

import cn.kinoko.common.model.KV;
import cn.kinoko.model.cnTeam.entity.CnTeam;
import cn.kinoko.model.cnTeam.query.CnTeamQuery;
import cn.kinoko.model.cnTeam.req.CnTeamPositionReq;
import cn.kinoko.model.cnTeam.req.CnTeamReq;
import cn.kinoko.model.cnTeam.vo.MemberVO;
import cn.kinoko.model.cnTeam.vo.CnTeamPageVO;
import cn.kinoko.model.cnTeam.vo.CnTeamVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @author kinoko
 */
public interface CnTeamService extends IService<CnTeam> {

    /**
     * 分页查询
     *
     * @param query 查询条件
     * @return 分页结果
     */
    Page<CnTeamPageVO> queryPage(CnTeamQuery query);

    /**
     * 新增汉化组
     *
     * @param req 请求参数
     * @return 执行结果
     */
    boolean save(CnTeamReq req);

    /**
     * 更新汉化组
     *
     * @param req 请求参数
     * @return 执行结果
     */
    boolean update(CnTeamReq req);

    /**
     * 检查邀请码是否存在
     *
     * @param joinCode 邀请码
     * @return 是否存在
     */
    boolean checkCodeExist(String joinCode);

    /**
     * 获取汉化组详情
     *
     * @param tId 汉化组id
     * @return 汉化组详情
     */
    CnTeamVO detail(Long tId);

    /**
     * 删除汉化组
     *
     * @param tId 汉化组id
     * @return 执行结果
     */
    boolean deleted(Long tId);

    /**
     * 加入汉化组
     *
     * @param tid 汉化组id
     * @param joinCode 邀请码
     * @return 执行结果
     */
    boolean joinTeam(Long tid, String joinCode);

    /**
     * 查询汉化组成员列表
     *
     * @param tid 汉化组id
     * @return 成员列表
     */
    List<MemberVO> teamMember(Long tid);

    /**
     * 获取汉化组职位列表
     *
     * @return 职位列表
     */
    List<KV<Long, String>> positionList();

    /**
     * 更新汉化组职位
     *
     * @param req 请求参数
     * @return 执行结果
     */
    boolean changePosition(CnTeamPositionReq req);

    /**
     * 移出汉化组成员
     *
     * @param tid 汉化组id
     * @param uid 用户id
     * @return 执行结果
     */
    boolean removeMember(Long tid, Long uid);

    /**
     * 退出汉化组
     *
     * @param tid 汉化组id
     * @return 执行结果
     */
    boolean quitTeam(Long tid);

    /**
     * 查询加入的汉化组（下拉框）
     *
     * @return 列表
     */
    List<KV<Long, String>> queryJoinTeamDdBox();

    /**
     * 查询用户加入的汉化组map
     *
     * @param uid 用户id
     * @return map
     */
    Map<Long, String> queryJoinTeamMap(Long uid);
}